From b05a4b6ede6d5f1d6fa765016a39900c1bb56d29 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Wed, 6 Apr 2005 22:35:02 +0000 Subject: [PATCH] bitkeeper revision 1.1279 (42546416zxlkOnJgFX_0JvQ0FjNFDw) Fix address canonicalisation in do_set_segment_base(). Signed-off-by: Keir Fraser --- xen/arch/x86/x86_64/mm.c | 3 +-- xen/include/asm-x86/x86_64/page.h | 9 +++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c index 7d15496d1e..d56b02fdba 100644 --- a/xen/arch/x86/x86_64/mm.c +++ b/xen/arch/x86/x86_64/mm.c @@ -249,8 +249,7 @@ long do_set_segment_base(unsigned int which, unsigned long base) { struct exec_domain *ed = current; - /* Canonicalise the base address. */ - base |= ~VADDR_MASK; + base = canonicalise_virt_address(base); switch ( which ) { diff --git a/xen/include/asm-x86/x86_64/page.h b/xen/include/asm-x86/x86_64/page.h index 029635e3bf..d4731b65f4 100644 --- a/xen/include/asm-x86/x86_64/page.h +++ b/xen/include/asm-x86/x86_64/page.h @@ -98,6 +98,15 @@ typedef l4_pgentry_t root_pgentry_t; #define L3_DISALLOW_MASK ((cpu_has_nx?0:(1UL<<63)) | (7UL << 7)) #define L4_DISALLOW_MASK ((cpu_has_nx?0:(1UL<<63)) | (7UL << 7)) +#ifndef __ASSEMBLY__ +static inline unsigned long canonicalise_virt_address(unsigned long v) +{ + v &= VADDR_MASK; + if ( v & (1UL << (VADDR_BITS - 1)) ) + v |= ~VADDR_MASK; +} +#endif /* !__ASSEMBLY__ */ + #endif /* __X86_64_PAGE_H__ */ /* -- 2.30.2